<?php
# DP 13-03-2012
# Przykłądy pracy z bazą danych

class TestBazaController extends Zend_Controller_Action
{

	public $cos='testwlasnosc';
	/* @var $this->db Zend_Db_Adapter_Abstract */

	/*
	 * @param $db Zend_Db_Adapter_Abstract 
	 */
	private $db=null;
	
    public function init()
    {
        /* tekst zostanie zle wyseietlony bo wykonuje sie on za wczesnie */
    	//echo 'wywołanie akcji init !!';	
    	$profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
		$profiler->setEnabled(true);
		
		$this->bootstrap = $this->getInvokeArg('bootstrap');
	    $this->db = $this->bootstrap->getResource('db');
		$this->db->setProfiler($profiler);
    	
    }

    public function indexAction()
    {
       echo'bangla';
       $obiekt= new  Application_Model_TestowaOgolna();
       echo $obiekt->testowaFunckcja();
    }

    /**
     * Przykład tranzakcji w zendzie
     * Zasada dzialania jest identyczna jak w tranzakcjach z pdo
     */
 	public function tranzakcjetestAction()
    {
	    $bootstrap = $this->getInvokeArg('bootstrap');
	    $db = $bootstrap->getResource('db');

	    # test pobierania z bazy
	    /*
	 	$sql = 'select * from rzeki';
	    $wyn=$db->fetchAll($sql); // jeden wiersz
	    
	    echo'<pre>';
	    print_r($wyn);
	    echo '</pre>';
	    */
	    
	    try
	    {
    		/* @var $db Zend_Db_Adapter_Abstract */
	    	$db->beginTransaction();
	    	
	    	# 1 dobre zapytanie wykona sie comit
	    	//$db->query("UPDATE `rzeki` SET `nazwa`='aaa' WHERE `id`=1;"); // zadziala poprawnie bo dobre zapytanie
	    	
	    	# 2 wykona sie rolback automatycznie. Dobre zapytanie zostanie wycofane(dobrze)
	    	$db->query("UPDATE `rzeki` SET `nazwa`='aaa' WHERE `id`=1;");
	    	$db->query("UPDATE `rzeki` SETsdf `nazwa`='bbcc' WHERE `id`=2;"); 
	    	
	    	# 3 mogę sam podobnie jak w tranzakcjach z pdo definiowac przerwanie i cofnięcie tranzakcji
	    	//$db->rollBack();
	    	
	    	$db->commit();
	    	
	    }
	    catch (Exception $e)
	    {
	    	$db->rollBack();
	    	echo'Błąd podczas działania tranzakcji w metodzie tranzakcjatest '.$e->getMessage();
	    }
	    $this->_helper->viewRenderer->setNoRender();
	 	echo 'Test tranzakcje zend<br>';
	}
}

